package com.wangyu.talents.core.web.controller;

import com.wangyu.talents.common.support.security.StringEscapeEditor;
import com.wangyu.talents.common.utils.DateUtils;
import java.beans.PropertyEditorSupport;
import java.sql.Timestamp;
import java.util.Date;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;

/**
 * 基础控制器 ，其他控制器继承此控制器获得日期字段类型转换和防止XSS攻击的功能
 *
 * @author wangyu
 * @Date 2018-09-02 12:12
 */
public abstract class BaseController {

  @InitBinder
  public void initBinder(WebDataBinder binder) {
    // String类型转换，将所有传递进来的String进行HTML编码，防止XSS攻击
    binder.registerCustomEditor(String.class, new StringEscapeEditor(true, false));

    // Date 类型转换
    binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
      @Override
      public void setAsText(String text) {
        setValue(DateUtils.parseDate(text));
      }
    });

    // Timestamp 类型转换
    binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
      @Override
      public void setAsText(String text) {
        Date date = DateUtils.parseDate(text);
        setValue(date == null ? null : new Timestamp(date.getTime()));
      }
    });
  }
}
